/**
 * Created by Nico on 2015/12/30.
 */


var config = require('../initialize/db_config.js');
var Schema = require('jugglingdb').Schema;
require('events').EventEmitter.prototype._maxListeners = 30; //设置最大监听数（默认最带为11，这里有27张表）
var schema = new Schema('mysql', config.dblocalhost); //本地：dblocalhost，218：db218
var should = require("should");
var Action,         //系统行为表
    Action_Log,     //行为日志表
    Addons,         //插件表
    Attachment,     //附件表
    Attribute,    //模型属性表
    Auth_Extend, //用户组与分类的对应关系表
    Auth_Group,
    Auth_Group_Access,
    Auth_Rule,
    Category,
    Channel,
    Config,
    Document,
    Document_Article,   //文档模型文章表
    Document_Download,  //文档模型下载表
    File, //文件表
    Hooks,
    Member,//会员表
    Menu,
    Model,//文档模型表
    Picture,
    Ucenter_Admin,//管理员表
    Ucenter_App,//应用表
    Ucenter_Member,//用户表
    Ucenter_Setting,//设置表
    Url,
    Userdata
    ;

describe('1、创建数据库表',function(){
    before(function(done){
        //创建action表
        Action = schema.define('Action', {
            name: {type: String, sort: true, default:'',limit: 30},        //行为唯一标识
            title: {type: String, index: true, default:'',limit: 100},     //行为说明
            remark: {type: String, index: true, default:'',limit: 100},    //行为描述
            rule: {type: String, index: true, limit: 100},      //行为规则
            log:{type:String, index:true,limit:100},            //日志规则
            type:{type:Number, index:true,default:1,limit:100},           //类型
            status:{type:Number,index:true,default:0,limit:100},          //状态
            update_time:{type:Number,index:true,default:0,}                //修改时间
        },{
            table:"gr_action"
        });
        //插件表
        Action_Log = schema.define('Action_Log', {
            action_id: {type: Number, sort: true, limit: 30},
            user_id: {type: Number, index: true, limit: 100},
            action_ip: {type: Number, index: true, limit: 100},
            model: {type: String, index: true, limit: 100},
            record_id:{type:Number, index:true,limit:100},
            remark:{type:String, index:true,limit:100},
            status:{type:Number,index:true,limit:100},
            create_time:{type:Number,index:true}
        },{
            table:"gr_action_log"
        });

        Addons = schema.define("Addons",{
            name:{type:String,index:true,limit:40},             //插件名或者标识
            title:{type:String, index:true,limit:20},           //中文名
            description:{type:String,index:true},                 //插件描述
            status:{type:Number,index:true},                    //状态
            config:{type:String, index:true},                     //配置
            author:{type:String,index:true},                    //作者
            version:{type:String,index:true},                   //版本号
            create_time:{type:Date,default:function(){return new Date();}},//安装时间
            has_adminlist:{type:Number,default:0}                        //是否有后台列表
        },{
            table:"gr_addons"
        });
        //附件表
        Attachment = schema.define('Attachment',{
            uid:{type:Number,default:0},    //用户ID
            title:{type:String, default:""}, //附件显示名
            type:{type:Number,default:0},//附件类型
            source:{type:Number,default:0},//资源ID
            record_id:{type:Number,default:0},//关联记录ID
            download:{type:Number,default:0},
            size:{type:Number,default:0},
            create_time:{type:Date,default:function(){return new Date();}},
            update_time:{type:Date,default:function(){return new Date()}},
            status:{type:Number,default:0} //状态
        },{
            table:"gr_attachment"
        });
        //模型属性表
        Attribute = schema.define('Attribute',{
            name:{type:String,default:""}, //字段名
            title:{type:String,default:''},//字段注释
            field:{type:String, default:''},//字段定义
            type:{type:String, default:''}, //数据类型
            value:{type:String, default:''},//字段默认值
            remark:{type:String, default:''},//备注
            is_show:{type:Number,default:1},//是否显示
            extra:{type:String, default:''},//参数
            model_id:{type:Number, default:0},//模型类型
            is_must:{type:Number, default:0},//是否必填
            status:{type:Number,default:0},//状态
            update_time:{type:Date,default:function(){return new Date()}},//更新时间
            create_time:{type:Date,default:function(){return new Date()}},//创建时间
            validate_rule:{type:String},//
            validate_time:{type:Number},
            error_info:{type:String},
            validate_type:{type:String},
            auto_rule:{type:String},
            auto_time:{type:Number},
            auto_type:{type:String}
        },{
            table:"gr_attribute"
        });

        //用户组与分类的对应关系表
        Auth_Extend = schema.define('Auth_Extend',{
            group_id:{type:Number},//用户id
            extend_id:{type:Number},//扩展表中数据的id
            type:{type:Number},//扩展类型标识 1:栏目分类权限;2:模型权限
        },{
            table:"gr_auth_extend"
        });

        Auth_Group = schema.define('Auth_Group',{
            moduld:{type:String},//用户组所属模块
            type:{type:Number},//组类型
            title:{type:String, default:'',limit:20},//用户组中文名称
            description:{type:String, default:'',limit:80},//描述信息
            status:{type:Number,default:1},//用户组状态：为1正常，为0禁用,-1为删除
            rules:{type:String, default:'',limit:500}//用户组拥有的规则id，多个规则 , 隔开
        },{
            table:"gr_auth_group"
        });

        Auth_Group_Access = schema.define('Auth_Group_Access',{
            uid:{type:Number,limit:10},//用户id
            group_id:{type:Number,limit:8}, //用户组id

        },{
            table:'gr_auth_group_access'
        });
        Auth_Rule = schema.define('Auth_Rule',{
            module:{type:String, limit:20},//规则所属module
            type:{type:Number,default:1,limit:2},//1-url;2-主菜单
            name:{type:String, default:'',limit:80},//规则唯一英文标识
            title:{type:String, default:'',limit:20},//规则中文描述
            status:{type:Number,default:1,limit:1},//是否有效(0:无效,1:有效)
            condition:{type:String, default:'',limit:300},//规则附加条件
        },{
            table:'gr_auth_rule'
        });
        //分类表
        Category = schema.define('Category',{
            name:{type:String,limit:20},//标志
            title:{type:String, limit:50},//标题
            pid:{type:Number,default:0,limit:10},//上级分类ID
            sort:{type:Number,default:0,limit:10},//排序（同级有效）
            list_row:{type:Number,default:10,limit:3},//列表每页行数
            meta_title:{type:String, default:'',limit:50},//SEO的网页标题
            keywords:{type:String, default:'',limit:255},//关键字
            description:{type:String, default:'',limit:255},//描述
            template_index:{type:String, limit:100},//频道页模版
            template_lists:{type:String, limit:100},//别表页模版
            template_detail:{type:String, limit:100},//详情页模版
            template_edit:{type:String, limit:100},//编辑页模版
            model:{type:String, limit:100,default:''},//关联模型
            type:{type:String, limit:100,default:''},//允许发布的内容类型
            link_id:{type:Number,limit:10,default:0},//外链
            allow_publish:{type:Number,limit:3,default:0},//是否允许发布内容
            display:{type:Number,limit:3,default:0},//可见性
            reply:{type:Number,limit:3,default:0},//是否允许回复
            check:{type:Number,limit:3,default:0},//发布的文章是否需要审核
            reply_model:{type:String, limit:100,default:''},
            extend:{type:String},//扩展设置
            create_time:{type:Date,default:function(){return new Date();}},
            update_time:{type:Date,default:function(){return new Date();}},
            status:{type:Number,default:0,limit:4},//数据状态
            icon:{type:Number,default:0,limit:10},//分类图标
        },{
            table:'gr_category'
        });

        //频道表
        Channel = schema.define('Channel', {
            pid:{type:Number,default:0,limit:10},//上级频道ID
            title:{type:String, limit:30},//频道标题
            url:{type:String, limit:100},//频道链接
            sort:{type:Number,default:0,limit:10},//导航排序
            create_time:{type:Date,default:function(){return new Date();}},
            update_time:{type:Date,default:function(){return new Date();}},
            status:{type:Number,default:0,limit:4},//状态
            target:{type:Number,default:0,limit:2},//新窗口打开
        },{
            table:'gr_channel'
        });

        Config = schema.define('Config',{
            name:{type:String, default:'',limit:30},//配置名称
            type:{type:Number,default:0,limit:3},//配置类型
            title:{type:String ,default:'',limit:30},//配置说明
            group:{type:Number,default:0,limit:3},//配置分组
            extra:{type:String, default:'',limit:255},//配置值
            remark:{type:String, default:'',limit:100},//配置说明
            create_time:{type:Date,default:function(){return new Date();}},
            update_time:{type:Date,default:function(){return new Date();}},
            status:{type:Number,limit:4,default:0},//状态
            value:{type:String},//配置值
            sort:{type:Number,default:0,limit:3},//排序
        },{
            table:'gr_config'
        });

        Document = schema.define('Document',{
            uid:{type:Number,default:0,limit:10},//用户ID
            name:{type:String, default:'',limit:40},//标识
            title:{type:String, default:'',limit:80},//标题
            category_id:{type:Number}
        },{
            table:'gr_document'
        });
        //文档模型文章表
        Document_Article = schema.define('Document_Article',{
            parse:{type:Number,default:0,limit:3},//内容解析类型
            content:{type:String},//文章内容
            template:{type:String, default:'',limit:100},//详情页显示模版
            bookmark:{type:Number,default:0,limit:10},//收藏数
        },{
            table:'gr_document_article'
        });

        //文档模型下载表
        Document_Download = schema.define('Document_Download',{
            parse:{type:Number,default:0,limit:3},//内容解析类型
            content:{type:String},//下载详细描述
            template:{type:String, default:'',limit:100},//详情页显示模版
            file_id:{type:Number,limit:10,default:''},//文件ID
            download:{type:Number,limit:10,default:0},//下载次数
            size:{type:Number,limit:20,default:0}//文件大小
        },{
            table:'gr_document_download'
        });

        //文件表
        File = schema.define('File',{
            name:{type:String, default:'',limit:30},//原始文件名
            savename:{type:String, default:'',limit:20},//保存名称
            savepath:{type:String, default:'',limit:30},//文件保存路径
            ext:{type:String, default:'',limit:5},//文件后缀
            mime:{type:String, default:'',limit:40},//文件mime类型
            size:{type:Number,default:0,limit:10},//文件大小
            md5:{type:String, default:'',limit:32},//文件md5
            sha1:{type:String,default:'',limit:40},//文件sha1编码
            location:{type:Number,default:0,limit:3},//文件保存位置
            create_time:{type:Date,default:function(){return new Date();}} //上传时间

        },{
            table:'gr_file'
        });

        //
        Hooks = schema.define('Hooks',{
            name:{type:String, default:'',limit:40},//钩子名称
            description:{type:String, default:'',limit:255},//描述
            type:{type:Number,default:1,limit:1},//类型
            update_time:{type:Date,default:function(){return new Date();}}, //上传时间
            addons:{type:String, default:'',limit:255}
        },{
            table:'gr_hooks'
        });

        //Member，会员表
        Member = schema.define('Member',{
            nickname:{type:String, default:'',limit:16},//昵称
            sex:{type:Number,default:0,limit:3},//性别
            birthday:{type:Date,default:function(){return new Date('1900-01-01');}},//出生日期
            qq:{type:String, default:'',limit:10},//qq号
            score:{type:Number,default:0,limit:8},//用户积分
            login:{type:Number,default:0,limit:10},//登录次数
            reg_ip:{type:Number,default:0,limit:20},//注册IP
            reg_time:{type:Date,default:function(){return new Date();}},//注册时间
            last_login_ip:{type:Number,default:0,limit:20},//最后登录IP
            last_login_time:{type:Date,default:function(){return new Date();}},//最后登录时间
            status:{type:Number,default:0,limit:4}//会员状态

        },{
            table:'gr_member'
        });

        //menu
        Menu = schema.define('Menu',{
            title:{type:String, default:'',limit:50},//标题
            pid:{type:Number,default:0,limit:10},//上级分类ID
            sort:{type:Number,default:0,limit:10},//排序（同级有效）
            url:{type:String, default:'',limit:255},//链接地址
            hide:{type:Number,default:0,limit:1},//是否隐藏
            tip:{type:String, default:'',limit:255},//提示
            group:{type:String, default:'',limit:50},//分组
            is_dev:{type:Number,default:0,limit:1},//是否仅开发者模式可见
        },{
            table:'gr_menu'
        });

        //Model,//文档模型表
        Model = schema.define('Model',{
            name:{type:String,default:'',limit:30},//模型标识
            title:{type:String,default:'',limit:30},//模型名称
            extend:{type:Number,default:0,limit:10},//继承的模型
            relation:{type:String,default:'',limit:30},//继承与被继承模型的关联字段
            need_pk:{type:Number,default:1,limit:1},//新建表时是否需要主键字段
            field_sort:{type:String,default:'',limit:255},//表单字段排序
            field_group:{type:String,default:'1:基础',limit:255},//字段分组
            attribute_list:{type:String,default:'',limit:255},//属性列表（表的字段）
            template_list:{type:String,default:'',limit:100},//列表模板
            template_add:{type:String,default:'',limit:100},//新增模板
            template_edit:{type:String,default:'',limit:100},//编辑模板
            list_grid:{type:String,default:'',limit:255},//列表定义
            list_row:{type:Number,default:10,limit:2},//列表数据长度
            search_key:{type:String,default:'',limit:50},//默认搜索字段
            search_list:{type:String,default:'',limit:255},//高级搜索的字段
            create_time:{type:Date,default:function(){return new Date();}},//创建时间
            update_time:{type:Date,default:function(){return new Date();}},//更新时间
            status:{type:Number,default:0,limit:3},//状态
            engine_type:{type:String,default:'MyISAM',limit:25},//数据库引擎
        },{
            table:'gr_model'
        });

        //Picture
        Picture = schema.define('Picture',{
            path:{type:String, default:'',limit:255},//路径
            url:{type:String, default:'',limit:255},//图片链接
            md5:{type:String, default:'',limit:32},//文件md5
            sha1:{type:String, default:'',limit:40},//文件sha1编码
            stauts:{type:Number,default:0,limit:2},//状态
            create_time:{type:Date,default:function(){return new Date();}},//创建时间

        },{
            table:'gr_picture'
        });

        //Ucenter_Admin,//管理员表
        Ucenter_Admin = schema.define('Ucenter_Admin',{
            member_id:{type:Number,default:0,limit:10},//管理员用户ID
            status:{type:Number,default:0,limit:3},//管理员状态
        },{
            table:'gr_ucenter_admin'
        });

        //Ucenter_App,//应用表
        Ucenter_App = schema.define('Ucenter_App',{
            title:{type:String, default:'',limit:30},//应用名称
            url:{type:String, default:'',limit:100},//应用url
            ip:{type:String, default:'',limit:15},//应用IP
            auth_key:{type:String, default:'',limit:100},//加密key
            sys_login:{type:Number,default:0,limit:1},//同步登录
            allow_ip:{type:String, default:'',limit:255},//允许访问的IP
            create_time:{type:Date,default:function(){return new Date();}},//创建时间
            update_time:{type:Date,default:function(){return new Date();}},//创建时间
            status:{type:Number,default:0,limit:4},//应用状态
        },{
            table:'gr_ucenter_app'
        });
        //ucenter_member
        Ucenter_Member = schema.define('Ucenter_Member',{
            username:{type:String, default:'',limit:16},//用户名
            password:{type:String, default:'',limit:32},//密码
            email:{type:String, default:'',limit:32},//邮箱
            mobile:{type:String, default:'',limit:15},//手机号
            reg_time:{type:Date,default:function(){return new Date();}},//注册时间
            reg_ip:{type:Number,default:0,limit:20},//注册ip
            last_login_time:{type:Date,default:function(){return new Date();}},//最后登录时间
            last_login_ip:{type:Number,default:0,limit:20},//最后登录ip
            update_time:{type:Date,default:function(){return new Date();}},//创建时间
            stauts:{type:Number,default:0,limit:4},//用户状态
        },{
            table:'gr_ucenter_member'
        });
        //Ucenter_Setting,//设置表
        Ucenter_Setting = schema.define('Ucenter_Setting',{
            type:{type:Number,default:0,limit:3},//设置类型（1-用户配置）
            value:{type:String}//配置数据
        },{
            table:'gr_ucenter_setting'
        });

        Url = schema.define('Url',{
            url:{type:String, default:'',limit:255},//链接地址
            short:{type:String, default:'',limit:100},//短网址
            status:{type:Number,default:2,limit:2},//状态
            create_time:{type:Date,default:function(){return new Date();}},//创建时间

        },{
            table:'gr_url'
        });

        Userdata = schema.define('Userdata',{
            type:{type:Number,limit:3} ,//类型标识
            target_id:{type:Number,limit:10},//目标ID
        },{
            table:'gr_userdata'
        });

        //设置超时
        this.timeout(10000);
        schema.automigrate(done);

    });
    describe('find', function() {

        /*before(function(done) {
            console.log(11111111111);
            Action.destroyAll(done);
        });
*/
        it('should query by id: not found', function(done) {
            Action.find(1, function(err, u) {
                should.not.exist(u);
                should.not.exist(err);
                console.log(111)
                done();
            });
        });
        /*it('should query by id: found', function(done) {
            User.create({name:"nico",email:"110"},function(err, u) {
                should.not.exist(err);
                should.exist(u.id);
                User.find(u.id, function(err, u) {
                    should.exist(u);
                    should.not.exist(err);
                    u.should.be.an.instanceOf(User);
                    done();
                });
            });
        });*/
    });

})
